package com.example.websocket;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

@Controller // 这是一个Spring MVC控制器，但用于WebSocket消息处理
public class SignalingController {

    // SimpMessagingTemplate 用于向WebSocket客户端发送消息
    private final SimpMessagingTemplate messagingTemplate;

    // 构造函数注入 SimpMessagingTemplate
    public SignalingController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    /**
     * 处理客户端发送到 "/app/signal" 的消息。
     * 当客户端（例如，发起方）发送 SDP Offer 或 ICE Candidate 到这个目的地时，此方法会被调用。
     * @param message 接收到的信令消息内容（通常是JSON字符串，包含SDP或ICE Candidate）
     */
    @MessageMapping("/signal") // 映射客户端发送到 "/app/signal" 的消息
    public void handleSignalingMessage(String message) {
        System.out.println("Received signal from client: " + message);

        // 将接收到的消息广播到所有订阅了 "/topic/signal" 的客户端。
        // 这意味着：一个客户端发来的信令，会被转发给房间内的所有其他客户端。
        // 在一对一场景中，就是转发给另一个对等体。
        messagingTemplate.convertAndSend("/topic/signal", message);
    }
}
